package com.tony.websocket.controller;

import com.tony.websocket.bean.Chat;
import com.tony.websocket.bean.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;

import java.security.Principal;

/**
 * Created with IntelliJ IDEA.
 *
 * @Title: GreetingController
 * @Auther: 皮蛋布丁
 * @Date: 2021/07/05/20:35
 * @Description:
 */
@Controller
public class GreetingController {

    @Autowired
    SimpMessagingTemplate simpMessagingTemplate;    //消息发送模板

    /**
    * @Description: greeting 群聊的实现(方式1)
    * @Param: [message]
    * @return: com.tony.websocket.bean.Message
    * @Author: 皮蛋布丁
    * @Date: 2021/7/5 21:59
    */
//    @MessageMapping("/hello")   //greeting方法用来处理浏览器发送过来的消息，消息则往/hello这里发送
//    @SendTo("/topic/greetings")    //消息在greeting方法中处理完成后，消息转发到/greetings
//    public Message greeting(Message message) {
//        return message;
//    }

    /**
    * @Description: greeting 群聊的实现(方式2)
    * @Param: [message]
    * @return: void
    * @Author: 皮蛋布丁
    * @Date: 2021/7/5 22:07
    */
    @MessageMapping("/hello")
    public void greeting(Message message) {
        simpMessagingTemplate.convertAndSend("/topic/greetings",message);
    }

    /**
    * @Description: chat 单聊的实现
    * @Param: [principal 消息从何用户而来, chat]
    * @return: void
    * @Author: 皮蛋布丁
    * @Date: 2021/7/5 22:30
    */
    @MessageMapping("/chat")
    public void chat(Principal principal, Chat chat) {
        //消息从哪来
        chat.setFrom(principal.getName());
        //消息发送给目标用户(参数1：发送用户；参数2：发送地址；参数3：发送消息对象)
        simpMessagingTemplate.convertAndSendToUser(chat.getTo(),"/queue/chat",chat);
    }
}
